define (require, exports, module) ->
  require 'mods/info_prod/info_prod_css.css'

  infoProdApi = require 'mods/info_prod/info_prod_api'

  module.exports = Vue.extend

    # 组件模板
    template: require 'mods/info_prod/info_prod_tpl.js'

    # 定义变量
    data: () ->
      # 是否加载完成
      loadedSucc: false
      # 加载失败提示语
      loadedFail: ''
      # 当前页码
      page: 1
      # 点击查看更多
      viewMoreTxt: '查看更多'
      # 用户信息
      userInfo: {}
      # 持仓列表是否为空
      listIsEmpty: true
      # 我的产品列表标题
      prodTitList:
        prod_name: "产品|代码"
        cur_amount: "份额(份)"
        buy_date: "买入日期"
        unit_net: "单位净值(日)"
        yjjz: "业绩基准"
        end_date: "到期日"
        handle: "操作"

      # 我的产品列表
      prodList: []

    # 定义方法
    methods:

      # 插件加载
      pluginLoad: () ->
        self = @

      # 加载成功
      loadedSuccFunc: () ->
        self = @
        self.$nextTick () ->
          # 加载成功标识
          self.loadedSucc = true
          # 插件加载
          self.pluginLoad()

      # 分页加载
      gotoPage: (page) ->
        self = @
        self.page = parseInt page
        self.queryInfoProdList()

      # 从session中获取用户信息
      getUserSession: () ->
        self = @
        # 字符串对象
        tmpObjStr = sessionStorage.getItem 'userInfo'
        # 将字符串对象转为json对象
        self.userInfo = JSON.parse tmpObjStr
        # 未开客户号
        if '未绑定' is self.userInfo?.client_id
          # 显示 暂无持仓
          self.listIsEmpty = true
          # 加载成功 - 处理函数
          self.loadedSuccFunc()
        # 已开客户号
        else
          # 分页加载持仓数据
          self.gotoPage self.page

      # 查询持仓
      queryInfoProdList: () ->
        self = @
        # 查持仓参数
        params =
          id_kind: self.prodInfo?.id_kind,
          id_no: self.prodInfo?.id_no
          client_id: self.userInfo?.client_id,
          prod_code: "",
          secum_account: "",
          trans_account: "",
          prodta_no: "87",
          dsorgan_flag: "0",
          agency_no: "GF9"
          currentpage: self.page
          pagesize: 10

        return infoProdApi.queryInfoProdList params
          .then (res) ->
            # 处理接口返回数据
            self.dealData res

          .catch (err) ->
            console.error '查询持仓出错:',err

      # 处理持仓返回信息
      dealData: (res) ->
        self = @
        
        codeArr = []

        # 分页
        if self.prodList?.length == 0
          # 如果返回结果为空
          if res?.length != 0
            
            for item in res
              
              codeArr.push item
            
            # 隐藏"暂无持仓"提示
            self.listIsEmpty = false

          # 返回结果不为空
          else
            # 显示"暂无持仓"提示
            self.listIsEmpty = true

        else
          # 隐藏"暂无持仓"提示
          self.listIsEmpty = false

          if res?.length != 0
            for item in res
              codeArr.push item
          else
            self.viewMoreTxt ='已显示全部内容'

        if 0 is codeArr?.length
          # 加载成功 - 处理函数
          self.loadedSuccFunc()
        
        else
          # 调用异步请求函数 获取持仓产品信息
          self.queryProdByCode codeArr

      # 通过prod_code来查询产品信息
      queryProdByCode: (codeObjArr) ->

        self = @
        # 异步请求数组
        funcs = []

        # 遍历所有持仓对象
        _.map codeObjArr, (codeObj) ->

          # 构造参数
          params =
            query:
              prod_code: codeObj?.prod_code

          # 通过持仓代码获取持仓产品信息
          p = infoProdApi.queryProdByCode params
            
            .then (res) ->

              tmpArr = res?.data?.data
              
              if 0 is tmpArr?.length
                console.log '无此产品：', code
              
              else
                return tmpArr[0]
            
            .catch (err) ->
              console.error 'err:',err

          funcs.push p

        # 并行请求
        return Promise.all funcs
          # 成功
          .then (resArr) ->

            for item,idx in resArr

              # 将查询持仓返回的份额和购买日期加入产品对象中
              item.current_amount = codeObjArr[idx]?.current_amount
              item.buy_date = codeObjArr[idx]?.buy_date
              
              self.prodList.push item
            
            # 加载成功 - 处理函数
            self.loadedSuccFunc()

          # 错误处理
          .catch (err) ->
            return err

    # 引用组件
    components:
      'c-info-side': require 'mods/info_side/info_side_mod'

    # 计算属性
    computed:

      # 加载中的样式
      loaddingClass: () ->
        self = @
        if self.loadedSucc
          return 'c-hidden'
        if self.loadedFail
          return 'c-hidden'
        return ''

      # 加载成功的样式
      loadedSuccClass: () ->
        self = @
        return if self.loadedSucc then '' else 'c-vhidden'

      # 加载失败的样式
      loadedFailClass: () ->
        self = @
        return if self.loadedFail then '' else 'c-hidden'

    # 组件初始化执行
    mounted: () ->

      self = @

      # 从session中获取用户信息
      self.getUserSession()